#include <list>
#include <iostream>
#include <algorithm>
using namespace std;

/* 迭代器在删除后会随着删除的数据而泄露，这时候需要重新置位
 * 迭代器的位置其实是抽象的
 */


void printList(const list<int>& L) {

    for (const auto &it : L) {
        cout << it << " ";
    }
    cout << endl;
}

//插入和删除
void test01()
{
    list<int> L;
    //尾插
    L.push_back(10);
    L.push_back(20);
    L.push_back(30);
    //头插
    L.push_front(100);
    L.push_front(200);
    L.push_front(300);

    printList(L);

    //尾删
    L.pop_back();
    printList(L);

    //头删
    L.pop_front();
    printList(L);

    //插入
    auto it = L.begin();
    L.insert(++it, 1000);
    printList(L);

    //删除
    it = L.begin();
    it = L.erase(++it);
    printList(L);

    L.erase(it);
    printList(L);

    // //移除
    // L.push_back(10000);
    // L.push_back(10000);
    // L.push_back(10000);
    // printList(L);
    // L.remove(10000);
    // printList(L);

    // //清空
    // L.clear();
    // printList(L);
}

bool myCompare(int v1, int v2)
{
    return v1 > v2;
}

void test02()
{
    std::list<int> L;
    L.push_back(1);
    L.push_back(3);
    L.push_back(4);
    L.push_back(6);
    L.push_back(9);
    L.sort(myCompare);
    printList(L);

}

int main() {

    // test01();
    test02();
    return 0;

}